File upload একটি গুরুত্বপূর্ণ ফিচার, যা ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীকে ফাইল আপলোড করার সুবিধা দেয়। Servlets ব্যবহার করে ফাইল আপলোড করতে হলে কিছু নির্দিষ্ট কনফিগারেশন এবং প্রক্রিয়া অনুসরণ করতে হয়। Servlet সাধারণত HTTP POST পদ্ধতি ব্যবহার করে ফাইল আপলোড প্রক্রিয়া করে। এই প্রক্রিয়ায়, ক্লায়েন্ট (ইউজার) একটি ফাইল নির্বাচিত করে এবং সার্ভারে পাঠায়, তারপর সার্ভলেট সেই ফাইলটি গ্রহণ করে প্রক্রিয়া করে (যেমন স্টোর করা, ডাটাবেসে সংরক্ষণ করা ইত্যাদি)।
Servlet এর মাধ্যমে File Upload করার প্রক্রিয়া
ফাইল আপলোড করার জন্য সার্ভলেটের সাথে সাধারণত Apache Commons FileUpload বা Servlet 3.0 API ব্যবহার করা হয়। এখানে আমরা Servlet 3.0 API ব্যবহার করে ফাইল আপলোড করার প্রক্রিয়া দেখব, কারণ এটি জাভা 7 এবং পরবর্তী ভার্সনে অন্তর্ভুক্ত রয়েছে এবং ফাইল আপলোডের জন্য সহজে কাজ করা যায়।
1. HTML Form তৈরি করা
প্রথমে একটি HTML form তৈরি করতে হবে যেখানে ব্যবহারকারী ফাইল আপলোড করতে পারবে। ফর্মের enctype="multipart/form-data" এট্রিবিউটটি গুরুত্বপূর্ণ, কারণ এটি ফর্মের মধ্যে ফাইল ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
HTML Form (fileUploadForm.html)
<!DOCTYPE html>
<html>
<head>
<title>File Upload Form</title>
</head>
<body>
<h2>File Upload</h2>
<form action="uploadFile" method="POST" enctype="multipart/form-data">
<label for="file">Choose File:</label>
<input type="file" name="file" id="file" required><br><br>
<input type="submit" value="Upload File">
</form>
</body>
</html>
Explanation:
enctype="multipart/form-data": এটি ফাইল আপলোড ফর্মের জন্য খুবই গুরুত্বপূর্ণ। এটি ফর্মে ফাইল ডেটা পাঠাতে সক্ষম করে।<input type="file">: এটি ফাইল চয়েস করার জন্য ব্যবহৃত হয়।
2. File Upload Servlet তৈরি করা
এখন একটি সার্ভলেট তৈরি করতে হবে যা ফাইলটি গ্রহণ করবে এবং সার্ভারে আপলোড করবে। Servlet 3.0 API ফাইল আপলোডের জন্য MultipartConfig অ্যানোটেশন এবং Part ইন্টারফেস সরবরাহ করে।
File Upload Servlet Example (FileUploadServlet.java)
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet("/uploadFile")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
maxFileSize=1024*1024*10, // 10MB
maxRequestSize=1024*1024*50) // 50MB
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get the uploaded file part
Part filePart = request.getPart("file");
String fileName = getFileName(filePart);
// Set the path to save the uploaded file
String uploadPath = getServletContext().getInitParameter("uploadDir");
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir(); // Create directory if it does not exist
}
// Save the file to the server
filePart.write(uploadPath + File.separator + fileName);
// Respond to the user
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h3>File uploaded successfully!</h3>");
out.println("<p>File name: " + fileName + "</p>");
out.println("</body></html>");
}
// Helper method to get the file name
private String getFileName(Part part) {
String partHeader = part.getHeader("content-disposition");
for (String cd : partHeader.split(";")) {
if (cd.trim().startsWith("filename")) {
return cd.substring(cd.indexOf('=') + 2, cd.length() - 1);
}
}
return null;
}
}
Explanation:
@MultipartConfig: সার্ভলেটের উপর এই অ্যানোটেশন ব্যবহার করা হয়েছে যাতে ফাইল আপলোডের জন্য সার্ভলেট কনফিগারেশন করা হয়। এখানে:fileSizeThresholdএর মান হলো ফাইলের একটি নির্দিষ্ট সাইজ (যেমন 2MB) পর্যন্ত মেমোরিতে রাখা হবে।maxFileSizeহলো একক ফাইলের সর্বোচ্চ সাইজ (এখানে 10MB)।maxRequestSizeহলো সমস্ত রিকোয়েস্টের সর্বোচ্চ সাইজ (এখানে 50MB)।
getPart("file"): এটি ফর্মের ফাইল অংশ (ফাইল ইনপুট) গ্রহণ করে।getFileName(part): ফাইলের নাম বের করার জন্য সহায়ক মেথড।filePart.write(): এটি ফাইলটি সার্ভারের ডিরেক্টরিতে স্টোর করে।
3. Configure File Upload Directory in web.xml
ফাইল আপলোড করার জন্য সার্ভারের মধ্যে একটি ডিরেক্টরি প্রয়োজন যেখানে ফাইলগুলো সেভ হবে। এই ডিরেক্টরির পাথ web.xml ফাইলে কনফিগার করা যেতে পারে।
web.xml Configuration
<web-app>
<context-param>
<param-name>uploadDir</param-name>
<param-value>/var/www/uploads</param-value> <!-- Path to the folder where files will be uploaded -->
</context-param>
<servlet>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/uploadFile</url-pattern>
</servlet-mapping>
</web-app>
Explanation:
<context-param>: এখানে uploadDir প্যারামিটার ব্যবহার করে ফাইল আপলোডের জন্য ডিরেক্টরি পাথ দেওয়া হয়েছে।
4. Run the Application
এখন সার্ভলেটটি রান করার জন্য একটি Servlet Container (যেমন Apache Tomcat) ব্যবহার করতে হবে। ফর্মটি POST পদ্ধতি ব্যবহার করবে এবং সার্ভলেটের /uploadFile URL-এ ডেটা পাঠাবে।
Steps:
- সার্ভলেট কনটেইনার (যেমন Tomcat) চালু করুন।
- fileUploadForm.html ফাইলটি ব্রাউজারে খুলুন।
- ফর্মে একটি ফাইল চয়ন করুন এবং Submit বাটনে ক্লিক করুন।
- সার্ভলেট ফাইলটি গ্রহণ করে নির্দিষ্ট ডিরেক্টরিতে আপলোড করবে।
Conclusion
Servlets ব্যবহার করে file upload প্রক্রিয়া করা অত্যন্ত সহজ এবং ফ্লেক্সিবল। এখানে Servlet 3.0 API ব্যবহার করে MultipartConfig অ্যানোটেশন এবং Part ইন্টারফেস ব্যবহার করা হয়েছে। এই প্রক্রিয়ার মাধ্যমে ব্যবহারকারী ফাইল আপলোড করতে পারে এবং সার্ভলেট সেই ফাইলটি গ্রহণ করে প্রক্রিয়া করে এবং স্টোর করে।
এই ধরনের ফাইল আপলোড সার্ভিস সাধারণত web applications এবং enterprise applications তে ব্যবহৃত হয় যেখানে ইউজারদের ডাটা অথবা অন্যান্য ফাইল সার্ভারে আপলোড করার সুযোগ প্রদান করা হয়।
Read more